Jupyterノートブックプロット¶
Juptyer ノートで pyvista でインタラクティブにプロット!
pythreejs を使ったデモ¶
pythreejs を使ってインタラクティブな物理ベースのレンダリングを行います.
import pyvista as pv
from pyvista import examples
# download an example and display it using physically based rendering.
mesh = examples.download_lucy()
mesh.plot(color='lightgrey', pbr=True, metallic=0.2,
jupyter_backend='pythreejs')
ipygany を使ったデモ¶
from pyvista import demos
# basic glyphs demo
mesh = demos.glyphs(2)
text = demos.logo.text_3d("I'm interactive!", depth=0.2)
text.points *= 0.1
text.translate([0, 1.4, 1.5])
mesh += text
mesh['Example Scalars'] = mesh.points[:, 0]
mesh.plot(cpos='xy', jupyter_backend='ipygany', show_scalar_bar=True)
panel を使ったデモ¶
from pyvista import demos
demos.plot_logo(jupyter_backend='panel')
サポートされるモジュール¶
PyVistaモジュールは,Jupyterノートブック内でプロットする際のさまざまなバックエンドをサポートしています:
ipyvtklink を介したノートブックへのPyVistaストリーミングによるサーバ側のレンダリング
pythreejs を使ったクライアントサイドレンダリング
threejsを使ったクライアントサイドレンダリング.threejsを使用した ipygany によるクライアント側レンダリング.vtk.jsを使用した panel を使用したクライアント側レンダリング.itk.jsとvtk.jsを使用した itkwidgets によるクライアント側レンダリング.静止画像.
各バックエンドの詳細¶
これらの描画バックエンドの使用方法の詳細については,各バックエンドの個々のパッケージページを参照してください.
3 D対話型Jupyterlabプロットの状態¶
注釈
Jupyterノートブック内の3 Dプロットは,Jupyterがまだ比較的新しい技術であることもありますが,ここで使用されているWeb技術も新しい技術であり,ますます多くのユーザや開発者がクラウドやクラウドベースのビジュアライゼーションに移行しているため,急速に発展しています.ここにあるものは壊れ,急速に変化する可能性が高いです
これは2021年3月に書かれ,2021年8月に更新されたもので,すでに古くなっている可能性があります. 必ず,開発者のウェブサイトで変更点を確認してください.
Jupyterlabを使用してプロットする場合は,多数のモジュールのいずれかを使用することもできますが,それぞれに長所,短所,および短所があります. pyvista は Plotting クラスを使用するときにAPIの違いのいくつかを取り除こうとしますが,プロットはバックエンドによって異なるように見えます.また,バックエンドが異なると要件も異なり,展開環境をサポートしない場合があります.
次の表に,jupyterノートブックプロットモジュールで使用されるさまざまな機能とテクノロジを示します.
Jupyterノートブック3 Dモジュール |
||||
Jupyterlab 3 |
レンダリングの場所 |
バックエンド |
フレームバッファが必要 |
|
panel |
Yes |
クライアント |
vtk.js |
Yes |
pythreejs |
Yes |
クライアント |
threejs |
いいえ |
ipygany |
Yes |
クライアント |
threejs |
いいえ |
ipyvtklink |
Yes |
サーバ |
vtk |
Yes |
itkwidgets |
いいえ |
クライアント |
vtk.js |
Yes |
現時点では, itkwidgets と ipyvtklink はJupyterlab 3と互換性がなく,juptyerで "Error displaying widget: model not found" というメッセージが表示されます.さらに ipygany と pythreejs 以外のモジュールはすべてフレームバッファを必要とします.これは pyvista.start_xvfb() を使ったヘッドレス環境で設定できます.しかし,システムパッケージをインストールできないGoogle Colabでは, システムパッケージをインストールすることができないので,サーバーサイドレンダリングやフレームバッファを必要としない threejs のようなモジュールを使うべきです.
フレームバッファを必要とするバックエンドのためのヘッドレス環境へのインストールの詳細については, インストール を参照してください.個々のパッケージをインストールする場合,簡単な pip install <package> を使用してJupyterlab 3互換パッケージをインストールできます.詳細は,他のパッケージのインストール手順を参照してください.
PyVistaでの使用法¶
jupyterのプロッティングバックエンドを設定するには2つの方法があります. まず, Plotter.show() や dataset.plot() の ``jupyter_backend` パラメータを設定することで,プロットごとに設定することができます. また, pyvista.set_jupyter_backend() でグローバルに設定することもできます. 詳細はこちらをご覧ください.
- set_jupyter_backend(backend)¶
Jupyterノートブックのプロットバックエンドを設定します.
- パラメータ
- backend
str プロット時に使用するJupyterバックエンドです.次のいずれかである必要があります.
'ipyvtklink': リモートでレンダリングし,結果のVTKイメージをクライアントにストリーミングします.すべてのVTKメソッドをサポートしますが,リモートレンダリングのために遅延が発生します.ヘッドレスサーバーで表示する場合は,仮想フレームバッファをセットアップする必要があります.ipyvtklinkがインストールされている必要があります.'panel': VTKレンダーウィンドウをvtkjsオブジェクトに変換し,それをjupyterlabで視覚化します.ほとんどのVTKオブジェクトをサポートします.ヘッドレスサーバーで表示する場合は,仮想フレームバッファをセットアップする必要があります.panelがインストールされている必要があります.'ipygany': すべてのメッシュをipyganyメッシュに変換し,クライアント側でレンダリングするメッシュをストリーミングします.VTKメッシュをサポートしていますが,他にはほとんどありません.noneを除き,これは仮想フレームバッファを必要としない唯一の方法です.ipyganyがインストールされている必要があります.'pythreejs'`` : すべてのメッシュを
pythreejsのメッシュに変換し,それらをストリームしてクライアント側でレンダリングします.ipyganyを除けば,この方法は仮想フレームバッファを必要としない唯一の方法です. 必ずpythreejsがインストールされている必要があります.'static': Jupyterlab環境内に単一の静的イメージを表示します.ヘッドレスサーバーで表示する場合も仮想フレームバッファをセットアップする必要がありますが,追加のモジュールをインストールする必要はありません.'none': jupyterlab内にプロットを表示せず,専用のVTKレンダリングウィンドウを使用して表示します.これは,仮想フレームバッファがあっても,ヘッドレスサーバー上では何も生成しません.
- backend
例
pythreejsバックエンドを有効にします.
>>> import pyvista as pv >>> pv.set_jupyter_backend('pythreejs')
ipygany バックエンドを有効にします.
>>> import pyvista as pv >>> pv.set_jupyter_backend('ipygany')
panelバックエンドを有効にします.
>>> pv.set_jupyter_backend('panel')
ipyvtklink バックエンドを有効にします.
>>> pv.set_jupyter_backend('ipyvtklink')
静止画像を表示するだけです.
>>> pv.set_jupyter_backend('static')
JupyterLab内のすべてのプロットを無効にし,準のデスクトップVTKレンダリングウィンドウを使用して表示します.
>>> pv.set_jupyter_backend(None) # or 'none'